package org.example.projectdemo.repository;

import org.example.projectdemo.model.entity.Attendance;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

@Repository
public interface AttendanceRepository extends JpaRepository<Attendance,Long> {//<实体类, 主键类型>
    /**
     * 根据学生ID查找该学生的所有考勤记录
     *
     * @param studentId 学生ID
     * @return 该学生的考勤记录列表
     */
    List<Attendance> findByStudentId(Long studentId);

    /**
     * 根据排课ID查找该次课程的所有考勤记录
     *
     * @param scheduleId 排课ID
     * @return 该次课程的考勤记录列表
     */
    List<Attendance> findByScheduleId(Long scheduleId);

    /**
     * 根据学生ID和排课ID查找特定的考勤记录
     * 用于检查某个学生是否已经对某次课程进行了签到
     *
     * @param studentId 学生ID
     * @param scheduleId 排课ID
     * @return 包含考勤记录的Optional对象
     */
    Optional<Attendance> findByStudentIdAndScheduleId(Long studentId, Long scheduleId);
    
    /**
     * 根据学生ID删除该学生的所有考勤记录
     * 
     * @param studentId 学生ID
     */
    void deleteByStudentId(Long studentId);
    
    /**
     * 根据排课ID删除该次课程的所有考勤记录
     * 
     * @param scheduleId 排课ID
     */
    void deleteByScheduleId(Long scheduleId);
    
    /**
     * 检查指定学生ID的考勤记录是否存在
     * 
     * @param studentId 学生ID
     * @return 存在返回true，否则返回false
     */
    boolean existsByStudentId(Long studentId);
    
    /**
     * 检查指定ID的考勤记录是否存在
     * 
     * @param id 考勤记录ID
     * @return 存在返回true，否则返回false
     */
    boolean existsById(Long id);
}